// 🆘🆘🆘路由守卫
// 是控制页面登录权限的文件 不需要导出，因为只需要让代码执行即可
// import router, { constantRoutes, asyncrouter } from './router' // 简易权限管理
import router from './router'
// 引入store实例 和组件中的this.$store是一回事
import store from './store'
// 进度条
import nprogress from 'nprogress' // progress bar
import 'nprogress/nprogress.css'
// 定义白名单
const whiteList = ['/404', '/login']

// 前置守卫 登录过程10
router.beforeEach(async (to, from, next) => {
  console.log(to);
  // 开启进度条
  nprogress.start()
  // 有无token？判断是否已经登录
  if (store.getters.token) {
    // 如果没有id这个值 才会调用 vuex的获取用户资料的action
    if (!store.getters.userId) {
      // await 获取完资料再去放行
      // await store.dispatch('user/getUserInfo')

      /* // 简易权限管理--> 1，获取菜单控制的标识menus
      const { roles: { menus }} = await store.dispatch('user/getUserInfo')
      console.log('menus', menus)
      // 简易权限管理--> 2,过滤动态路由
      const filterRouters = asyncrouter.filter(t => menus.includes(t.name))
      // 3,简易权限管理-->添加动态路由
      // 注意：addRouters不会影响初始化路由配置，也就是说，router.option.routes不会跟着变化
      router.addRoutes([...filterRouters, { path: '*', redirect: '/404', hidden: true }])
      // 4,简易权限管理-->解决菜单没变化的问题
      router.options.routes = [...constantRoutes, ...filterRouters]
      // 5,解决404问题
      return next(to.path) // 重新跳转一次 */

      // 标准权限管理--> 1，获取菜单控制的标识menus
      const { roles: { menus }} = await store.dispatch('user/getUserInfo')
      console.log('menus', menus)
      // 标准权限管理--> 2,过滤动态路由
      const filterRouters = await store.dispatch('permission/filterRoutes', menus) // filterRouters当前用户的动态路由表
      console.log(filterRouters)
      // 3,标准权限管理-->添加动态路由
      router.addRoutes([...filterRouters, { path: '*', redirect: '/404', hidden: true }])
      // 4,标准权限管理-->解决菜单没变化的问题（在layout的index里面通过计算属性已经解决菜单无法显示的问题）
      // router.options.routes = [...constantRoutes, ...filterRouters]
      // 5,解决404问题
      return next(to.path) // 重新跳转一次，addRoutes必须要用next(地址)，不能用next() */
    }

    // 有token, 还要去登录页
    if (to.path === '/login') {
      // 强制到首页去
      return next('/')
    }
    // 有token,要去其他页面，放行
    next()
  } else {
    // 无token 判断去的是不是白名单？
    if (whiteList.includes(to.path)) {
      // 无token 要去白名单 放行
      return next()
    }
    // 无token 要去非白名单 强行转登录页
    next('/login')
  }
  // 手动强制关闭一次  为了解决 手动切换地址时  进度条的不关闭的问题
  nprogress.done()
})

// 后置守卫
router.afterEach(() => {
  // 关闭进度条
  nprogress.done()
})
